// 在线用户聊天的信息界面
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "Thread.hpp"

using namespace std;

// 接收所有用户信息
void recvmessage(int sockfd)
{
    while (true)
    {
        struct sockaddr_in addr;
        socklen_t len = sizeof(addr);
        char buffer[1024];
        ssize_t n = recvfrom(sockfd, buffer, sizeof(buffer) - 1, 0, (struct sockaddr*)&addr, &len); 
        if (n > 0)
        {
            buffer[n] = 0;
            cout << buffer << endl;
        }
    }
}

int main(int argc, char* argv[])
{
    // 创建套接字
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0)
    {
        cerr << "socket error" << endl;
        return -1;
    }
    // 地址绑定，默认端口为8088, 只接受所有用户信息，不回复
    struct sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = INADDR_ANY;
    addr.sin_port = htons(8088);
    int n = bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
    if (n < 0)
    {
        cerr << "bind error" << endl;
        cout << strerror(errno) << " : " << errno << endl;
        exit(1);
    }
    // 开始接收在线用户的所有信息
    cout << "聊天室在线用户界面" << endl;
    recvmessage(sockfd);
    return 0;
}
